// iStack.cpp: implementation of the iStack class.
//
//////////////////////////////////////////////////////////////////////

#include "iStack.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

iStack::iStack(int _size=20)
{
	if(_size > 0)
	{
		size = _size;
		t = new int[size];
	}
	else
	{
		size = 20;
		t = new int[size];	
	}
	top = 0;
}

iStack::~iStack()
{
	delete []t;
}

iStack::iStack(const iStack& _t)
{
	size = _t.size;
	t = new int [size];
	top = -1;
	int e;
	while(top != _t.top)
	{
		top++;
		t[top] = _t.t[top];
	}
}

int iStack::Push(int e)
{
	if(top < size-1)
	{
		t[++top] = e;
		return 0;
	}
	else
	{
		return -1;
	}
}

int iStack::Pop(int &e)
{
	if(top != 0)
	{
		e = t[top];
		return top--;
	}
	else
	{
		return -1;
	}
}

int iStack::Pop()
{
	if(top != 0)
	{
		return t[top--];
	}
	else
	{
		return -1;
	}
}

int iStack::IsEmpty()
{
	if(top == 0)
	{
		return 0;
	}
	else
	{
		return -1;
	}
}

int iStack::Length()
{
	return top;
}

int iStack::Clear()
{
	top = 0;
	return top;
}

int iStack::GetSize()
{
	return size;
}

int iStack::GetTop(int &e)
{
	if(top != 0)
	{
		e = t[top];
		return top;
	}
	else
	{
		e = -1;
		return 0;
	}
}
